package estrategias;

import simulacao.TabelaPayoffs;

public class EstrategiaMista extends Estrategia{
	
	private int numJogador;
	private double[] estrategia = {0.0, 0.0};

	public EstrategiaMista(int numJogador) {
		this.numJogador = numJogador;
		calcularEquilibrioMisto();
	}

	@Override
	public int getJogada() {		
		return Math.random()<estrategia[0]? 0: 1;
	}
	
	public void calcularEquilibrioMisto() {
		TabelaPayoffs tabelaPayoffs = TabelaPayoffs.getInstance();
		double a,b,c,d;
		double[] payoffMedioEstrategia = {0.0, 0.0};
		
		for (int i = 0; i < 2; i++){
			for (int j = 0; j < 2; j++){
				if(numJogador==0)
					payoffMedioEstrategia[i] += tabelaPayoffs.getPayoff(i, j, numJogador);
				else 
					payoffMedioEstrategia[i] += tabelaPayoffs.getPayoff(j, i, numJogador);
			}
		}	

		a = tabelaPayoffs.getPayoff(0, 0, numJogador);
		b = tabelaPayoffs.getPayoff(0, 1, numJogador);
		c = tabelaPayoffs.getPayoff(1, 0, numJogador);
		d = tabelaPayoffs.getPayoff(1, 1, numJogador);
		
		double q = (numJogador==0?(d-c):(d-b))/(a+d-b-c);
		
		if(payoffMedioEstrategia[0] >= payoffMedioEstrategia[1]){
			estrategia[0] = maior(q, 1.0-q);
			estrategia[1] = 1.0 - estrategia[0];
		}
		else{
			estrategia[1] = maior(q, 1.0-q);
			estrategia[0] = 1.0 - estrategia[1];
		}
	}
	
	public double maior(double a, double b){
		return a > b ? a: b;
	}

}
